|
1
5
唯一的方法是像第一个例子那样列出所有列。没有像这样的语法
但是,出于SQL注入和计划缓存的原因,应该使用参数化SQL。 |
|
|
2
5
我自己也有同样的问题,我想用一种简单的方法来解决这个问题。 我找到了解决办法 here 这就允许了。我稍微修改了一下,删除了输出id,并使IdColumnName的默认值为'id'。 IF OBJECT_ID('TableRowCopy') IS NOT NULL DROP PROCEDURE TableRowCopy
GO
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[TableRowCopy](
@TableName VARCHAR(50),
@WhereIdValue INT,
@IdColumnName VARCHAR(50) = 'Id'
)
AS
BEGIN
DECLARE @columns VARCHAR(5000), @query VARCHAR(8000);
SET @query = '' ;
SELECT @columns =
CASE
WHEN @columns IS NULL THEN column_name
ELSE @columns + ',' + column_name
END
FROM INFORMATION_SCHEMA.COLUMNS
WHERE (
TABLE_NAME = LTRIM(RTRIM(@TableName))
AND
column_name != LTRIM(RTRIM(@IdColumnName))
);
SET @query = 'INSERT INTO ' + @TableName + ' (' + @columns + ') SELECT ' + @columns + ' FROM ' + @TableName + ' WHERE ' + @IdColumnName + ' = ' + CAST(@WhereIdValue AS VARCHAR);
EXEC (@query);
SELECT SCOPE_IDENTITY();
END
示例用法:
|
|
|
Johnny T · 基于当前值的SQL合并表[重复] 1 年前 |
|
John D · 需要为NULL或NOT NULL的WHERE子句 1 年前 |
|
ojek · 如何对SQL结果进行分组和编号? 1 年前 |
|
|
senek · 如何在PL/SQL中将选择结果(列)放入数组中 1 年前 |
|
|
Sax · 规范化Google表格(第一步) 1 年前 |
|
|
Jatin · 检索卷计数的动态sql抛出错误语法错误[关闭] 1 年前 |
|
|
Andrus · 如何在sql中查找第二个匹配项 1 年前 |