ANi*_*sus 4 t-sql sql-server-2005
在存储过程中,我使用INSERT动态创建查询.这样做是为了强制默认值(如果它是NULL,则使用@name).
SET @sql = 'INSERT INTO table (username, password'
+ CASE @name IS NULL THEN '' ELSE ',name' END
+ ') VALUES (''root'',''gelehallon''' +
+ CASE @name IS NULL THEN '' ELSE ',''@name''' END
+ ')'
EXEC sp_executesql @sql
SET @id = SCOPE_IDENTITY()
Run Code Online (Sandbox Code Playgroud)
@id将为0无论如何.
即使另一个线程同时运行相同的存储过程,如何以安全的方式检索IDENTITY?
Ada*_*Dev 10
SET @sql = 'INSERT INTO table (username, password) VALUES (@username,@pwd)
SELECT @id = SCOPE_IDENTITY()'
EXEC sp_executesql @sql,
N'@username VARCHAR(50), @pwd VARCHAR(50), @id INTEGER OUTPUT',
'root', 'gelehallon', @id OUTPUT
-- @id now has SCOPE_IDENTITY() value in
Run Code Online (Sandbox Code Playgroud)
虽然有几点:
- 假设这是一个简化的例子,因为在这个例子中似乎不需要使用动态SQL
- 假设你不打算在db中以纯文本形式存储真实密码!
| 归档时间: |
|
| 查看次数: |
4207 次 |
| 最近记录: |